#include "recbox.h"
#include "ui_recbox.h"
#include"recboxitem.h"
#include<QtMath>
#include<QJsonObject>
RecBox::RecBox(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::RecBox),
    row(1),
    col(4)
{
    ui->setupUi(this);
}
void RecBox::initRecBoxUi(QJsonArray data, int row)
 {
    //上面是单行，下面是两行，用if语句对上下分开布局

    // 如果是两⾏，说明当前RecBox是下面的supplyMusicBox
    if(2 == row)
    {
        //设置行数为2
        this->row = row;
        //设置列数为8
        this->col = 8;
    }
    else
    {
        // 否则：只有⼀⾏，为主界⾯上recMusicBox
        this->row = 1;
        this->col = 4;  // 单行模式，同样需要8列（或其他合理值）
        //隐藏向下翻也按钮（单行模式部显示）
       ui->recListDown->hide();
    }
    //图⽚保存起来：将传入的JSON数据保存到成员变量imageList中
    imageList = data;

    //表示当前页面索引为0
    currentIndex = 0;
    //计算总共有机组图片，ceil表示向上取整
    count = ceil(imageList.size()/col);//需要包含QtMath

    // 创建并填充RecBox中的图片项
    createRecBoxItem();
}
void RecBox::createRecBoxItem()
{
    //应为每次打开都是重新随机布局照片，所以每次打开都需要清理布局中所有项目

    //1.清理上半部分RecboxItem控件
    //QList中存储RecBoxItem类型的指针（让单个推荐空间进入到整体推荐栏中）
    //查找recListUp容器中所有RecBoxItem子空间
    QList<RecBoxItem*> recUpList = ui->recListUp->findChildren<RecBoxItem*>();
    //    - 递归查找recListDown控件中的所有RecBoxItem类型的子控件
    //    - 返回一个包含所有这些子控件指针的QList
    //遍历找到所有的RecBoxItem对象
    for(auto e : recUpList)
    {
        //从水平布局中移除控件（但是无法销毁控件本身）
        ui->recListUpHLayout->removeWidget(e);
        //删除控件对象，释放内存
        delete  e;
    }
    //2.清理下半部分RecboxItem控件
    QList<RecBoxItem*> recDownList = ui->recListDown->findChildren<RecBoxItem*>();
    for(auto e : recDownList)
    {
        //从水平布局中移除控件
        ui->recListDownHLayout->removeWidget(e);
        delete  e;
    }

    //3.创建新的项目项
    //index变量相当于跟踪当前创建的项目再组内的位置（0到col-1）
   int index = 0;
   //循环创建col个项目（根据有多少列决定）
   //i从从currentIndex*col开始，确保显示正确的页数
   //如果currentIndex=1（第二组），col=8，则i从8开始
   for(int i = currentIndex* col; i < col + currentIndex * col; ++i)
   {
       //创建新的RecBoxItem对象
        RecBoxItem* item = new RecBoxItem();

        //从imageList中获取对应的JSON对象，imageList是一个QJsonArray，包含多个JsonValue,每个值都是一个QJsonObject
        QJsonObject obj = imageList[i].toObject();

        // 设置项目的文本内容（从JSON对象的"text"字段获取）
        item->setRecText(obj.value("text").toString());

        // 设置项目的图片路径（从JSON对象的"path"字段获取）
        item->setRecImage(obj.value("path").toString());

        //4.将RecboxItem添加到Recbox当中
        //当目前已使用索引index超过列数的一半并且是recListDownHLayout（2行）
        if(index >=col / 2 && row == 2 )
        {
            ui->recListDownHLayout->addWidget(item);
        }
        //当index为4，5，6，7时，添加到ui->recListUpHLayout
        else
        {
            ui->recListUpHLayout->addWidget(item);
        }
        ++index;
   }
}
//当商贩按钮被点击执行时
void RecBox::on_btUp_clicked()
{

    //将当前索引-1，表示要显示前一页内容
    currentIndex--;

    if(currentIndex < 0 )
    {
        //如果已经是第一页，保持当前索引为0
        currentIndex = 0;
    }
    // 根据新的currentIndex重新创建和显示项目
    createRecBoxItem();
}
//当下翻页按钮被点击时
void RecBox::on_btDown_clicked()
{
    //将当前显示索引+1，表示要显示下一页内容
    currentIndex++;
    //检查索引是否超出总页数范围
    if(currentIndex >= count )
    {
        //如果已经时最后一页，循环回到第一页
        currentIndex = 0;
    }
     // 根据新的currentIndex重新创建和显示项目
    createRecBoxItem();
}
RecBox::~RecBox()
{
    delete ui;
}


